home *** CD-ROM | disk | FTP | other *** search
/ Archive Magazine CD 1995 / Archive Magazine CD 1995.iso / discs / prog_disc / volume_5 / issue_10 / shared_c / s / AEx2 < prev   
Encoding:
Text File  |  1992-05-13  |  1.7 KB  |  54 lines

  1. ;*******************************************************************************
  2. ;*
  3. ;* AEx2.s
  4. ;* © Simon Callan, 1992
  5. ;*
  6. ;* This program is intended as an example of using the Shared C Library from
  7. ;* assembler.
  8. ;*
  9. ;* int main(int argc,char * argv[])
  10. ;*  {
  11. ;*  int loop;
  12. ;*  for(loop=0;loop<argc;loop++)
  13. ;*    printf("arg %d = %s\n",loop,argv[loop]);
  14. ;*  return 0;
  15. ;*  }
  16. ;*
  17. ;*******************************************************************************
  18.  
  19.           GET       @.Header.Registers
  20.  
  21.           AREA      |ASM$$Code|,CODE,READONLY
  22.  
  23.           EXPORT    main
  24.           IMPORT    printf
  25.           IMPORT    |x$stack_overflow|
  26.  
  27.           KEEP                          ; keep all symbols for debugging
  28.  
  29. main      MOV       ip,sp               ; Generate APCS-R stack frame
  30.           STMFD     sp!,{v1,v2,v3,fp,ip,lr,pc}
  31.           SUB       fp,ip,#4
  32.  
  33.           MOV       v1,a1               ; preserve a1 + a2 for future reference.
  34.           MOV       v2,a2
  35.           CMP       sp,sl               ; Have we reached the end of the stack (very unlikely at this point) ?
  36.           BLLT      |x$stack_overflow|  ; Yes
  37.  
  38.           MOV       v3,#0               ; loop = 0
  39. loop      CMP       v3,v1               ; Have we reached the end ?
  40.           BGE       finished            ; Yes
  41.           ADR       a1,text             ; a1 points to text
  42.           MOV       a2,v3               ; a2 = loop
  43.           LDR       a3,[v2,v3,ASL#2]    ; a3 = argv[loop]
  44.           BL        printf              ; Call printf
  45.           ADD       v3,v3,#1            ; loop++
  46.           B         loop
  47.  
  48. finished  MOV       a1,#0
  49.           LDMEA     fp,{v1,v2,v3,fp,sp,pc}^
  50.  
  51. text      =         "arg %d = %s",10,0
  52.  
  53.           END
  54.